From 628aeda7ee9f6cd3221c3293b636678db4c5e5a2 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Mon, 16 Jan 2023 23:15:46 +0100 Subject: [PATCH] macos: Provide the right drag action We should use the drag action/operation provided by the drag handlers, not rely on our internal bookkeeping. --- gdk/macos/GdkMacosWindow.c | 1 + gdk/macos/gdkmacosdrag-private.h | 1 + gdk/macos/gdkmacosdrag.c | 12 ++++++++++++ 3 files changed, 14 insertions(+) diff --git a/gdk/macos/GdkMacosWindow.c b/gdk/macos/GdkMacosWindow.c index 1005d0c837..79a25c04d3 100644 --- a/gdk/macos/GdkMacosWindow.c +++ b/gdk/macos/GdkMacosWindow.c @@ -715,6 +715,7 @@ typedef NSString *CALayerContentsGravity; GdkDrag *drag = _gdk_macos_display_find_drag (GDK_MACOS_DISPLAY (display), sequence_number); _gdk_macos_event_source_queue_event ([NSApp currentEvent]); + gdk_drag_set_selected_action (drag, _gdk_macos_drag_ns_operation_to_action (operation)); if (gdk_drag_get_selected_action (drag) != 0) g_signal_emit_by_name (drag, "drop-performed"); diff --git a/gdk/macos/gdkmacosdrag-private.h b/gdk/macos/gdkmacosdrag-private.h index ab46828d5e..64db6ba770 100644 --- a/gdk/macos/gdkmacosdrag-private.h +++ b/gdk/macos/gdkmacosdrag-private.h @@ -66,6 +66,7 @@ gboolean _gdk_macos_drag_begin (GdkMacosDrag *self, GdkContentProvider *content, GdkMacosWindow *window); NSDragOperation _gdk_macos_drag_operation (GdkMacosDrag *self); +GdkDragAction _gdk_macos_drag_ns_operation_to_action (NSDragOperation operation); void _gdk_macos_drag_surface_move (GdkMacosDrag *self, int x_root, int y_root); diff --git a/gdk/macos/gdkmacosdrag.c b/gdk/macos/gdkmacosdrag.c index b7549e5b9e..c0201df067 100644 --- a/gdk/macos/gdkmacosdrag.c +++ b/gdk/macos/gdkmacosdrag.c @@ -410,6 +410,18 @@ _gdk_macos_drag_operation (GdkMacosDrag *self) return operation; } +GdkDragAction +_gdk_macos_drag_ns_operation_to_action (NSDragOperation operation) +{ + if (operation & NSDragOperationCopy) + return GDK_ACTION_COPY; + if (operation & NSDragOperationMove) + return GDK_ACTION_MOVE; + if (operation & NSDragOperationLink) + return GDK_ACTION_LINK; + return 0; +} + void _gdk_macos_drag_surface_move (GdkMacosDrag *self, int x_root, -- 2.30.2